import Layout from '@/layout/Index.vue'
import userUserStore from '@/stores/user'
import Login from '@/views/login/Login.vue'
import { createRouter, createWebHistory } from 'vue-router'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { userAsideStore } from '@/stores/aside'

//为什么要用路由懒加载？ 当需要组件时在加载
const routes = [
  {
    path: '/',
    name: 'layout',
    component: Layout,
    children: [
      // {
      //   path: 'user',
      //   component: () => import('@/views/user/User.vue'),
      //   meta: { name1: '用户管理', name2: '用户列表' },
      // },
      // {
      //   path: 'user/create',
      //   component: () => import('@/views/user/UserCreate.vue'),
      //   meta: { name1: '用户管理', name2: '用户创建' },
      // },
      // {
      //   path: 'role',
      //   component: () => import('@/views/role/Role.vue'),
      //   meta: { name1: '角色管理', name2: '角色列表' },
      // },
      // {
      //   path: 'role/create',
      //   component: () => import('@/views/role/RoleCreate.vue'),
      //   meta: { name1: '角色管理', name2: '角色创建' },
      // },
      // {
      //   path: 'auth',
      //   component: () => import('@/views/auth/Auth.vue'),
      //   meta: { name1: '权限管理', name2: '权限列表' },
      // },
      // {
      //   path: 'auth/create',
      //   component: () => import('@/views/auth/CreateAuth.vue'),
      //   meta: { name1: '权限管理', name2: '权限创建' },
      // },
      // {
      //   path: 'analysis',
      //   component: () => import('@/views/index/Analysis.vue'),
      //   meta: { name1: '首页管理', name2: '数据分析' },
      // },
      // {
      //   path: 'bigData',
      //   component: () => import('@/views/index/bigData.vue'),
      //   meta: { name1: '首页管理', name2: '大屏数据可视化' },
      // },
      // {
      //   path: '/fsdy/film',
      //   component: () => import('@/views/fsdy/film/index.vue'),
      //   meta: { name1: '锋神电影', name2: '电影管理' },
      // },
      // {
      //   path: '/fsdy/cinema',
      //   component: () => import('@/views/fsdy/cinema/index.vue'),
      //   meta: { name1: '锋神电影', name2: '影院管理' },
      // },
      // {
      //   path: '/fsdy/music',
      //   component: () => import('@/views/fsdy/music/index.vue'),
      //   meta: { name1: '锋神电影', name2: '音乐管理' },
      // },
      // {
      //   path: '/ftwm/store',
      //   component: () => import('@/views/ftwm/store/index.vue'),
      //   meta: { name1: '锋团外卖', name2: '门店管理' },
      // },
      // {
      //   path: '/ftwm/goods',
      //   component: () => import('@/views/ftwm/goods/index.vue'),
      //   meta: { name1: '锋团外卖', name2: '门店管理' },
      // },
      // {
      //   path: '/dcm/user',
      //   component: () => import('@/views/dcm/user.vue'),
      //   meta: { name1: '堵车么', name2: '用户管理' },
      // },
      // {
      //   path: '/dcm/road',
      //   component: () => import('@/views/dcm/road.vue'),
      //   meta: { name1: '堵车么', name2: '路况信息' },
      // },
      // {
      //   path: '/order',
      //   component: () => import('@/views/order/index.vue'),
      //   meta: { name1: '订单管理', name2: '订单列表' },
      // },
    ],
  },
  {
    path: '/login',
    component: Login,
  },
]

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes,
})

// console.log(router);
// 动态路由 语法:router.addRoute(父的名字,子路由对象)
// router.addRoute('layout', {
//   path: 'user',
//   component: () => import('@/views/user/User.vue'),
//   meta: { name1: '用户管理', name2: '用户列表' },
// })

//定义白名单,所有不受权限控制的名单
const whiteList = ['/login', '/404']
//路由前置守卫
// to 到哪去, from从什么来, next()放行 next(fasle)不放行
router.beforeEach(async (to, from, next) => {
  //开启进度条
  NProgress.start()
  // 携带token
  const user = userUserStore()
  const asideStore = userAsideStore()
  const token = user.userinfo.token

  // 判断有无token
  if (token) {
    //已经登录,判断是不是去登录页
    if (to.path === '/login') {
      //引到首页
      next('/')
    } else {
      // 如果menu中没有数据,在发送请求获取menu数据
      if (asideStore.menu.length === 0) {
        await asideStore.getMenu()
        next({ path: to.path, replace: true })
        return
      }
      next() //放行
    }
  } else {
    //没有登录,看在不在白名单中(不用登录即可访问的界面)
    if (whiteList.includes(to.path)) {
      next() //在白名单中就放行
    } else {
      next('/login') //引到登录页
    }
  }
})

// 后置路由守卫
router.afterEach(() => {
  //关闭进度条
  NProgress.done()
})

export default router
